import cv2 as cv
import numpy as np
# -----------------------图像几何变换--------------------
# 1.图片缩放

img = cv.imread('scenery.png')

# 按绝对值缩放
rows, cols = img.shape[:2]  # 获得图片的行列数
res = cv.resize(img, (2*cols, 2*rows), interpolation=cv.INTER_CUBIC)  # 缩放为原来的两倍。
# 参数：图像，缩放后图像的大小，使用的插值方法

# 按比例缩放
res1 = cv.resize(img, None, fx=0.5, fy=0.5)  # 缩放为原来的一半。
# 参数：图像，缩放比例，缩放后图像的大小，使用默认插值方法

cv.imshow('Original', img)
cv.imshow('Resized', res)
cv.imshow('Resized1', res1)
cv.waitKey(0)
cv.destroyAllWindows()

# 2.图片平移
rows, cols = img.shape[:2]  # 获得图片的行列数
M = np.float32([[1, 0, 200], [0, 1, 100]])  # 平移矩阵。
# 参数：1,0,200表示x方向平移200，0,1,100表示y方向平移100.该矩阵是3x2的矩阵，
# 和机器人坐标系的平移矩阵类似，只是这里缺少了z轴的平移。

dst = cv.warpAffine(img, M, (cols, rows))  # 仿射变换。图像，变换矩阵，输出图像的大小
cv.imshow('Original', img)
cv.imshow('Translated', dst)
cv.waitKey(0)
cv.destroyAllWindows()

# 3.图片旋转
rows, cols = img.shape[:2]  # 获得图片的行列数
M = cv.getRotationMatrix2D((cols/2, rows/2), 45, 0.5)  # 旋转矩阵。
# 参数：旋转中心点，旋转角度，缩放因子为1表示不缩放（缩小一点才能看全图）。

dst = cv.warpAffine(img, M, (cols, rows))  # 仿射变换。图像，变换矩阵，输出图像的大小
cv.imshow('Original', img)
cv.imshow('Rotated', dst)
cv.waitKey(0)
cv.destroyAllWindows()

